package com.example.treeutil.tree;

import java.util.List;
import java.util.Optional;

/**
 * 2022/12/2 <br>
 * 树型节点对象，可以是树枝节点也可以是叶子节点，当是树枝节点时，要求对象subs不为空，当是叶子节点是subs为空 <br>
 * 这些方法组成了描述一个树型节点的必要特征属性*
 * @author 王风雨
 */
public interface Node<ID>{
    ID getId();
    ID getPid();

    /**
     * 根据实际情况重载此判断的方法
     * @return true有上级目录，否则没有上级目录
     */
    default boolean hasParent() {
        ID pid = getPid();
        if (null == pid) return false;
        if (pid instanceof String) {
            return ((String) pid).length() > 0;
        }
        return true;
    }
    default void addChild(Node child){
        Optional.ofNullable(getSubs()).ifPresent(sub->getSubs().add(child));}
    List<Node> getSubs();
    long getIndex();
}
